﻿(function ($) {
    $.extend($.fn, {
        __init: function (settings) {
            this.find('li').each(function () {
                //alert($(this).hasClass('file'));
                if ($(this).hasClass('file')) {
                    $(this).find('span').bind('click', function () {
                        settings.click({ type: 'file', node: $(this) });
                    });
                } else {
                    function _click(li) {
                        if (li.hasClass('close')) {
                            li.removeClass('close').addClass('open');
                            if (li.hasClass('loaded') || li.hasClass('loading')) {
                                li.find('ul:first').show();
                            } else {
                                li.addClass('loading');
                                var ul = $("<ul><li class='loading'><span><img src='/Content/Images/tree/loading.gif'/></span></li></ul>");
                                li.append(ul);
                                var ps = {};
                                var pps = settings.parameters.split(',');
                                var i = 0;
                                for (i; i < pps.length; i++) {
                                    ps[pps[i]] = li.attr(pps[i]);
                                }

                                $.getJSON(settings.url, ps, function (jsonresult) {
                                    ul.remove();
                                    ul = $("<ul></ul>").css('display', 'none');

                                    //up.slideUp();
                                    function _buildarg(jsn) {
                                        var jp = []
                                        var i = 0;
                                        for (var j in jsn) {
                                            if (j != 'type') {
                                                jp[i] = j + "='" + jsn[j] + "'";
                                                i++;
                                            }
                                        }

                                        return jp.join(' ');
                                    }

                                    for (i = 0; i < jsonresult.length; i++) {
                                        var jsn = jsonresult[i];
                                        if (jsn.type == 'file') {
                                            ul.append($("<li class='file' " + _buildarg(jsn) + "><span>" + jsn.text + "</span></li>"));
                                        } else {
                                            ul.append($("<li class='folder close' " + _buildarg(jsn) + "><span class='flag'>&nbsp;</span><span class='book'><span>" + jsn.text + "</span></span></li>"));
                                        }
                                    }

                                    li.append(ul);

                                    ul.treeview(settings);
                                    if (li.hasClass('open')) {
                                        ul.show();
                                    }

                                    li.removeClass('loading').addClass('loaded');
                                });
                            }
                        } else {
                            li.removeClass('open').addClass('close');
                            li.find('ul:first').hide();
                        }
                    }
                    $(this).find('span:eq(0)').bind('click', function () {
                        _click($(this).parent());
                    });
                    $(this).find('span:eq(1)').bind('dblclick', function () {
                        _click($(this).parent());
                    }).bind('click', function () {
                        settings.click({ type: 'folder', node: $(this).find('span') });
                    });
                }
            });
        },

        treeview: function (settings) {
            settings = $.extend(SETTINGS, settings);
            $(this).__init(settings);
        }
    });

    //$.treeview = {};
    var SETTINGS = {
        click: function (arg) { },
        url: '',
        parameters: ''
    };
})(jQuery);